package com.nosnow.acl.helper;

import com.nosnow.acl.entity.Permission;

import java.util.ArrayList;
import java.util.List;

/**
 * <p>
 * 根据权限数据构建菜单数据
 * </p>
 *
 * @author bingheng
 * @since 2019-11-11
 */
public class PermissionHelper {

    public static final String MENU_ZERO = "0";

    /**
     * 使用递归方法建菜单
     * @param treeNodes: 所有的节点对象集合
     * @return
     */
    public static List<Permission> bulid(List<Permission> treeNodes) {
        List<Permission> trees = new ArrayList<>();

        // 把所有菜单list集合遍历，得到顶层菜单， pid = 0菜单，设置level为1
        for (Permission treeNode : treeNodes) {
            if ("0".equals(treeNode.getPid())) {
                treeNode.setLevel(1);
                trees.add(findChildren(treeNode, treeNodes));
            }
        }
        return trees;
    }

    /**
     * 递归查询子节点
     * @param treeNode: 一级节点对象
     * @param treeNodes： 所有的节点对象
     * @return
     */
    public static Permission findChildren(Permission treeNode,List<Permission> treeNodes) {
        treeNode.setChildren(new ArrayList<>());
        for (Permission it : treeNodes) {
            // 判断当前节点的id是否下级节点的id相同
            if(treeNode.getId().equals(it.getPid())) {
                int level = treeNode.getLevel() + 1;
                it.setLevel(level);

                // 将查询出来的子级菜单放入到父级菜单中
                if (treeNode.getChildren() == null) {
                    treeNode.setChildren(new ArrayList<>());
                }
                treeNode.getChildren().add(findChildren(it, treeNodes));
            }
        }
        return treeNode;
    }
}
